package redisx

import (
	"context"
	"log"
	"os"
	"time"

	"fiberx/internal/global/configs"

	"github.com/redis/go-redis/v9"
)

var R *redis.Client

type Redisx struct {
}

func New() *Redisx {
	return &Redisx{}
}

func (r *Redisx) Redisx(c *configs.Config) *redis.Client {
	RedisClient := redis.NewClient(&redis.Options{
		Addr:        c.Redis.Default.Address,                                  // Redis 服务器地址
		Password:    c.Redis.Default.Pass,                                     // Redis 密码，如果没有则为空
		DB:          c.Redis.Default.DB,                                       // 使用的数据库编号
		PoolSize:    c.Redis.Default.PoolSize,                                 // 连接池大小
		PoolTimeout: time.Duration(c.Redis.Default.IdleTimeout) * time.Second, // 连接池超时时间
	})

	// 测试连接
	ctx := context.Background()
	_, err := RedisClient.Ping(ctx).Result()
	if err != nil {
		log.Printf("Failed to connect to Redis: %v\n", err)
		os.Exit(1)
	}
	// log.Print("Connected to the redis successfully.")
	return RedisClient
}

func init() {
	R = New().Redisx(configs.C)
}
